package com.skyd.core.android.game;

import android.graphics.Canvas;

/**
 * 游戏显示区域抽象接口
 * @author SkyD
 *
 */
public interface IGameDisplayArea {
	/**
	 * 添加场景到当前显示区域
	 * 
	 * @param scene
	 *            场景
	 * @throws Exception
	 *             该场景已存在于另一显示区域中 或 同名场景已存在于此显示区域
	 */
	public void addScene(GameScene scene) throws Exception;
	
	/**
	 * 移出场景自当前显示区域
	 * 
	 * @param scene
	 *            场景
	 * @throws Exception
	 *             该场景并未存在于此显示区域中
	 */
	public void removeScene(GameScene scene) throws Exception;
	
	/**
	 * 获取DisplaySceneIndex。 功能注释：当前显示的场景索引位置
	 * 
	 * @return 当前的int类型的值
	 */
	public int getDisplaySceneIndex();

	/**
	 * 设置DisplaySceneIndex。 功能注释：当前显示的场景索引位置
	 * 
	 * @param value
	 *            要设置的int类型值
	 */
	public void setDisplaySceneIndex(int value);
	
	/**
	 * 通过名称查找场景，并将其设为当前场景，如果未找到则抛出异常
	 * 
	 * @param name
	 *            场景名称
	 * @throws Exception
	 *             未找到此名称的场景
	 */
	public void setDisplaySceneName(String name) throws Exception;
	
	/**
	 * 获取当前显示的场景的名称
	 * 
	 * @return 当前显示的场景的名称
	 */
	public String getDisplaySceneName();
	
	/**
	 * 获取当前显示的场景
	 * 
	 * @return 当前显示的场景
	 */
	public GameScene getDisplayScene();
	
	/**
	 * 根据名称获取显示区域中的场景，如果不存在则返回null
	 * 
	 * @param name
	 *            场景名称
	 * @return 场景
	 */
	public GameScene getSceneByName(String name);
	
	/**
	 * 更新显示区域及其当前显示的子项
	 */
	public void update();
	
	/**
	 * 绘制显示区域及其当前显示的子项
	 * 
	 * @param holder
	 *            SurfaceHolder
	 */
	public void draw(Canvas c);
	
	/**
	 * 获取显示区域宽度
	 * @return
	 */
	public int getWidth();
	
	/**
	 * 获取显示区域高度
	 * @return
	 */
	public int getHeight();
}
